package com.shakespace.effectivejava.edition2;

public class E015_ImmutableType {


}

/**
 * 1、不要提供任何剋改变属性的方法
 * 2、保证不会被扩展
 * --   使用final
 * --   私有化所有构造器，添加静态工厂方法替代公有的构造器
 * 3、所有属性都是final
 * 4、所有属性都是私有的
 * 5、确保对于任何可变组件的互斥访问 ： 如果类内部有指向可变对象的成员变量，需要确保使用者无法获得指向这些对象的引用
 * <p>
 * 不可变对象， 优点：
 * 1、线程安全
 * 2、可以被自由共享
 * 3、为其他对象提供了大量的构件
 * <p>
 * 缺点
 * 1、对于不同的值，需要创建不同的对象。 而创建对象的代价可能很高。
 * <p>
 * 使用可变配套类进行多步骤的创建：例如使用StringBuilder 创建String 对象， 这样中间过程就不会创建多余的对象。
 *
 * 除非有很好的理由要让类成为可变的类，否则就应该是不可变的。如果类不能被做成不可变的，仍然应该尽可能地限制它的可变性
 */
final class ImmutableType {

}